package com.gy.controller.research;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gy.controller.common.UserHolder;

import com.gy.entity.research.MaterialHistory;
import com.gy.result.Result;
import com.gy.service.MaterialHistoryService;
import com.gy.utils.AliOSSUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;


import java.time.LocalDate;


@RestController
@Slf4j
@RequestMapping("/material/history")
@Api(tags = "材料生成历史接口")
@CrossOrigin
public class MaterialHistoryController {

    @Autowired
    private AliOSSUtils aliOSSUtils;

    @Autowired
    private MaterialHistoryService materialHistoryService;


    /**
     * 新增材料生成历史记录
     */
    @PostMapping("/save")
    @ApiOperation("新增材料生成历史记录")
    public Result saveMaterialHistory(@RequestParam("file") MultipartFile file) {
        if (file.isEmpty()) {
            return Result.error("上传文件不能为空");
        }

        try {
            Long userId = UserHolder.getUser().getUserId();
            if (userId == null) {
                return Result.error("用户未登录或信息异常");
            }

            // 上传文件到阿里云 OSS，获取 URL
            String fileUrl = aliOSSUtils.upload(file);
            log.info("用户 [{}] 文件上传成功, URL: {}", userId, fileUrl);

            // 构建材料历史对象
            MaterialHistory materialHistory = new MaterialHistory();
            materialHistory.setPdfUrl(fileUrl);
            materialHistory.setUserId(userId);
            materialHistory.setTitle("材料-" + LocalDate.now()); // 生成默认标题

            // 保存到数据库
            materialHistoryService.save(materialHistory);
            log.info("用户 [{}] 材料历史记录已保存，文件 URL: {}", userId, fileUrl);

            return Result.success("文件上传成功");
        } catch (Exception e) {
            log.error("文件上传失败，错误信息: {}", e.getMessage(), e);
            return Result.error("文件上传失败，请稍后重试");
        }
    }

    /**
     * 根据 ID 查询材料历史记录
     */
    @GetMapping("/get/{id}")
    @ApiOperation("根据 ID 查询材料历史记录")
    public Result<MaterialHistory> getMaterialHistoryById(@PathVariable Long id) {
        if (id == null || id <= 0) {
            return Result.error("无效的 ID");
        }

        MaterialHistory materialHistory = materialHistoryService.getById(id);
        if (materialHistory != null) {
            log.info("查询到材料历史记录，ID: {}", id);
            return Result.success(materialHistory);
        } else {
            log.warn("未找到对应的材料历史记录，ID: {}", id);
            return Result.error("记录不存在");
        }
    }


    /**
     * 删除材料生成历史记录
     */
    @DeleteMapping("/delete/{id}")
    @ApiOperation("删除材料生成历史记录")
    public Result<?> deleteMaterialHistory(@PathVariable Long id) {
        if (id == null || id <= 0) {
            return Result.error("无效的 ID");
        }

        boolean isDeleted = materialHistoryService.removeById(id);
        if (isDeleted) {
            log.info("成功删除材料历史记录，ID: {}", id);
            return Result.success("删除成功");
        } else {
            log.warn("删除材料历史记录失败，ID: {}", id);
            return Result.error("删除失败，记录可能不存在");
        }
    }

    /**
     * 分页查询材料历史记录
     */
    @GetMapping("/list")
    @ApiOperation("分页查询材料历史记录")
    public Result<IPage<MaterialHistory>> listMaterialHistory(
            @RequestParam(value = "page", defaultValue = "1") int page,
            @RequestParam(value = "size", defaultValue = "10") int size) {

        Long userId = UserHolder.getUser().getUserId();
        if (userId == null) {
            return Result.error("用户未登录或信息异常");
        }

        // 构建分页查询
        Page<MaterialHistory> pageRequest = new Page<>(page, size);
        IPage<MaterialHistory> materialHistoryPage = materialHistoryService.lambdaQuery()
                .eq(MaterialHistory::getUserId, userId)
                .orderByDesc(MaterialHistory::getCreationTime) // 按时间倒序排列
                .page(pageRequest);

        return Result.success(materialHistoryPage);
    }

    /**
     * 更新材料生成历史记录中的文件名（title）
     */
    @PutMapping("/update/{id}")
    @ApiOperation("更新材料生成历史记录中的文件名")
    public Result<?> updateMaterialHistoryTitle(@PathVariable Long id, @RequestParam("title") String title) {
        if (id == null || id <= 0) {
            return Result.error("无效的 ID");
        }

        // 获取当前用户 ID
        Long userId = UserHolder.getUser().getUserId();
        if (userId == null) {
            return Result.error("用户未登录或信息异常");
        }

        // 查询历史记录
        MaterialHistory materialHistory = materialHistoryService.getById(id);
        if (materialHistory == null || !materialHistory.getUserId().equals(userId)) {
            return Result.error("记录不存在或无权限修改");
        }

        try {
            // 更新标题（文件名）
            materialHistory.setTitle(title);

            // 更新数据库
            boolean isUpdated = materialHistoryService.updateById(materialHistory);
            if (isUpdated) {
                log.info("成功更新材料历史记录的文件名，ID: {}", id);
                return Result.success("更新成功");
            } else {
                log.warn("更新材料历史记录的文件名失败，ID: {}", id);
                return Result.error("更新失败");
            }
        } catch (Exception e) {
            log.error("更新材料历史记录的文件名失败，错误信息: {}", e.getMessage(), e);
            return Result.error("更新失败，请稍后重试");
        }
    }

}
